home *** CD-ROM | disk | FTP | other *** search
-
- {$A+} { Align data }
- {$B-} { Boolean evaluation }
- {$E+} { 80x87 emulator }
- {$F-} { Force FAR calls }
- {$G+} { 80286 code }
- {$I-} { I/O checking }
- {$K-} { Smart Callbacks }
- {$N-} { 80x87 code }
- {$O-} { Overlays allowed }
- {$P-} { Open parameters }
- {$T-} { Typed pointers }
- {$V-} { String VAR checking }
- {$W-} { Windows stack frame for real mode }
- {$X+} { Extended syntax }
-
- {$IFDEF DEBUG}
- {$D+} { Debug information }
- {$L+} { Local symbols }
- {$Q+} { Overflow checking }
- {$R+} { Range checking }
- {$S+} { Stack checking }
- {$Y+} { Symbol reference information }
- {$ELSE}
- {$D-} { Debug information }
- {$L-} { Local symbols }
- {$Q-} { Overflow checking }
- {$R-} { Range checking }
- {$S-} { Stack checking }
- {$Y-} { Symbol reference information }
- {$ENDIF}
-
- {$M 1024,0}
-
- {$C Fixed Preload Permanent} { Code Segment attributes }
-
- LIBRARY MausHook;
-
- {$D DLL for SCRSTART.EXE, by Olaf Hess}
-
- USES WinTypes, WinProcs, Win31;
-
- CONST
- cTimeMin = 500; { 0.5 seconds }
- cTimeMax = 2000; { 2 seconds }
-
- VAR
- hMouseHook : hHook;
-
- (* ---- *)
-
- FUNCTION MouseHookProc (iCode: Integer; wParam: Word;
- VAR lParam: TMouseHookStruct) : LongInt; export;
- { The hook function. Note that by making lParam a var-parameter lParam
- remains 4 byte in size: It's the same as lParam: LongInt OR
- lParam: Pointer. By declaring lParam as a variable OF TYPE
- TMouseHookStruct we don't have to convert from pointer or longint to
- TMouseHookStruct. }
-
- CONST
- lCurrentTime : LongInt = 0;
- lPastTime : LongInt = 0;
-
- BEGIN
- IF (iCode >= 0) AND
- ((wParam = wm_MouseMove) OR (wParam = wm_NcMouseMove)) THEN
- { Valid iCode + mouse has been moved }
- IF (lParam.pt.X <= 0) AND (lParam.pt.Y <= 0) THEN
- BEGIN { Mouse pointer is in upper left corner }
- lCurrentTime := GetTickCount; { Get time }
-
- IF (lCurrentTime <= (lPastTime + cTimeMin)) OR
- (lCurrentTime >= (lPastTime + cTimeMax)) THEN
- { Time interval to small or to big }
- lPastTime := lCurrentTime
- ELSE
- BEGIN { Right time interval ->> start Screen Saver }
- PostMessage ($FFFF, wm_SysCommand, sc_ScreenSave, 0);
- lPastTime := 0;
- END; { else }
- END; { if }
-
- { Pass call through to the hook chain }
- MouseHookProc := CallNextHookEx (hMouseHook, iCode, wParam,
- LongInt (@lParam));
- END; { MouseHookProc }
-
- (* ---- *)
-
- FUNCTION InstallMouseHook : Boolean; export;
- { Set the mouse hook }
-
- VAR
- HookProc : THookProc;
- pToMouseHookProc : TFarProc;
-
- BEGIN
- { This type conversion is necessary to fool the compiler }
- pToMouseHookProc := TFarProc (@MouseHookProc);
- { Set the hook }
- hMouseHook := SetWindowsHookEx (wh_Mouse, THookProc (pToMouseHookProc),
- hInstance, 0);
- InstallMouseHook := hMouseHook <> 0;
- END; { InstallMouseHook }
-
- (* ---- *)
-
- PROCEDURE RemoveMouseHook; export;
- { Romove the hook from the chain }
-
- BEGIN
- UnHookWindowsHookEx (hMouseHook);
- END; { RemoveMouseHook }
-
- (* ---- *)
-
- EXPORTS InstallMouseHook index 1;
- EXPORTS RemoveMouseHook index 2;
-
- (* ---- *)
-
- BEGIN { MausHook }
- hMouseHook := 0;
- END. { MausHook }
-